;##################################
;命令：
;nasm -f elf64 day11_another.asm -o main.o && gcc main.o -o main -lc -no-pie && ./main
;输出：
;Value in arr[0] is 1.234500.
;Value in arr[1] is 2.345600.
;Value in arr[2] is 3.456700.
;Value in arr[3] is 4.567800.
;##################################
extern printf

section .data
	msg: db `Value in arr[%d] is %f.\n`, 0
	arr: dd 0, 1.1111, 2.2222, 3.3333, 4.4444, 5.5555, 6.6666, 7.7777

section .text
	global main

main:
	push rbp
	mov rbp, rsp

;####################################################################################
	;向寄存器移入两个float
	vmovsd xmm0, [arr + 4]
	;将xmm0的第一个元素放到xmm1的四个位置上
	vbroadcastss xmm1, xmm0
	;将第二个位置上的元素复制到第三个和第四个位置
	vpermilps xmm0, xmm0, 84
	;减法
	vsubps xmm0, xmm0, xmm1
	vmovups [arr], xmm0
;####################################################################################

;######################################################
	;打印
	mov ebx, 0
	jmp compare

execute:
	mov rdi, msg
	movsxd rsi, ebx
	cvtss2sd xmm0, dword [arr + 4 * ebx]
	movq rdx, xmm0
	call printf

	inc ebx

compare:
	cmp ebx, 8
	jl execute
;######################################################

	mov eax, 0
	leave
	ret
